package com.smec;


import com.sun.org.apache.bcel.internal.generic.RET;

import java.util.*;

/**
 * @ClassName Util
 * @Description TODO
 * @Author u3431
 * @Date 2021/12/28 8:43
 * @Version 1.0
 */
public class Utils {

    /**
     * 用Integer.toBinaryString将整数转为二进制数组，利用二进制位再逆向转为十进制
     * @param n  输入的多项式系数长度或信号长度
     * @return 返回n对应的二进制逆序
     */
    static public int[] bitReverseCopy(int n){
        int s = (int)(Math.log(n)/Math.log(2));
        int[] rev = new int[n];
        String str;
        for(int i=0;i<n;i++)
        {
            str = Integer.toBinaryString(i);
            for(int k=0;k<str.length();k++){
                rev[i] += ((int)str.charAt(str.length()-1-k)-48)*(int)Math.pow(2,s-k-1);
            }
        }
        return rev;
    }

    /**
     *
     * @param rev 逆序数组
     * @param inputData 多项式系数矩阵或输入信号
     * @return 按逆序数组将inputData重新排序
     */
    static public List<Complex> bitReverseCopy(int[] rev, List<FftDTO> inputData){
        List<Complex> output = new ArrayList<>() ;
//        for(int i=0;i<rev.length;i++){
//            output.add(new Complex());
//        }
//        Iterator<FftDTO> iterator =  inputData.iterator();
        FftDTO ele = new FftDTO();
        for (int index:rev
             ) {
            output.add(new Complex(Float.parseFloat(inputData.get(index).getValue())));
//            ele = iterator.next();
//            output.set(index, new Complex(Float.parseFloat(ele.getValue())));

        }
        return output;
    }

    public static void main(String[] args) {

    }
}
